import { isEmpty } from 'lodash';

import share from './share';
import Pay from './pay';

// #ifdef H5
import { isWxBrowser } from '/shop/helper/utils';
// #endif
import wechat from './provider/wechat/index.js';

const device = uni.getSystemInfoSync();
const os = device.platform;
let name = 'App';
let provider = '';
let platform = '';
let isWechatInstalled = true;

// #ifdef H5
if (isWxBrowser()) {
	name = 'WechatOfficialAccount';
	provider = 'wechat';
	platform = 'officialAccount';
} else {
	name = 'H5';
	platform = 'h5';
}
// #endif

// #ifdef MP-WEIXIN
name = 'WechatMiniProgram';
platform = 'miniProgram';
provider = 'wechat';
// #endif

if (isEmpty(name)) {
	uni.showToast({
		title: '暂不支持该平台',
		icon: 'none',
	});
}

// 加载当前平台前置行为
const load = () => {
	if (provider === 'wechat') {
		wechat.load();
	}
};

// 使用厂商独占sdk name = 'wechat' | 'alipay' | 'apple'
const useProvider = (_provider = '') => {
	if (_provider === '') _provider = provider;
	if (_provider === 'wechat') return wechat;
};

// 支付服务转发

/**
 * @param payment 支付方式， 线下 线上 还是余额
 * @param orderType  订单类型，是直接商品购买goods  还是购物车
 * @param orderSn 订单编号.
 */
const pay = (payment, orderType, orderSN) => {
	return new Pay(payment, orderType, orderSN);
};

/**
 * 检查更新 (只检查小程序和App)
 * @param {Boolean} silence - 静默检查
 */
const checkUpdate = (silence = false) => {
	let canUpdate;
	// #ifdef MP-WEIXIN
	useProvider().checkUpdate(silence);
	// #endif

	// #ifdef APP-PLUS
	// TODO: 热更新
	// #endif
};

/**
 * 检查网络
 * @param {Boolean} silence - 静默检查
 */
async function checkNetwork() {
	const networkStatus = await uni.getNetworkType();
	if (networkStatus.networkType == 'none') {
		return Promise.resolve(false);
	}
	return Promise.resolve(true);
}

// 获取小程序胶囊信息
const getCapsule = () => {
	// #ifdef MP
	let capsule = uni.getMenuButtonBoundingClientRect();
	if (!capsule) {
		capsule = {
			bottom: 56,
			height: 32,
			left: 278,
			right: 365,
			top: 24,
			width: 87,
		};
	}
	return capsule;
	// #endif

	// #ifndef MP
	return {
		bottom: 56,
		height: 32,
		left: 278,
		right: 365,
		top: 24,
		width: 87,
	};
	// #endif
};

const capsule = getCapsule();

// 标题栏高度
const getNavBar = () => {
	return device.statusBarHeight + 44;
};
const navbar = getNavBar();

function getLandingPage() {
	let page = '';
	// #ifdef H5
	page = location.href.split('?')[0];
	// #endif
	return page;
}

// 设置ios+公众号网页落地页 解决微信sdk签名问题
const landingPage = getLandingPage();

const _platform = {
	name,
	device,
	os,
	provider,
	platform,
	useProvider,
	checkUpdate,
	checkNetwork,
	pay,
	share,
	load,
	capsule,
	navbar,
	landingPage,
	isWechatInstalled,
};

export default _platform;
